package core.tool.htmlparser;

import java.io.IOException;
import java.net.URLConnection;

import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

import core.tool.httpconection.HttpConnectUtil;

public class HtmlparserUtil {
	
//	/**
//	 * 如果网络爬虫监控不通过 可以通过这个方法 iteye
//	 * @param url
//	 * @param tabName
//	 * @param attributeName
//	 * @param attributeValue
//	 * @param flag
//	 * @return
//	 */
//	public static Node[] getNodeList(String url,String tabName,String attributeName,String attributeValue,boolean flag) {
//  		Node[] nodes = null;
//		try {
//			if (!flag) {
//				nodes = getNodeList(url, tabName, attributeName, attributeValue);
//			} else {
//				Parser parser = new Parser();
//				String result = HttpConnectUtil.getURLContent(url);
//				parser.setInputHTML(result);
//		  		AndFilter filter=new AndFilter(new TagNameFilter(tabName), new HasAttributeFilter(attributeName,attributeValue));
//		  		NodeList nodelist = parser.parse(filter);
//		  		nodes = nodelist.toNodeArray();
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return nodes;
//	} 
	
	
	
	public static Node[] getNodeList(String url,String tabName,String attributeName,String attributeValue) {
  		Node[] nodes = null;
	      try {
	  		Parser parser = new Parser();
			String result = HttpConnectUtil.getURLContent(url);
			parser.setInputHTML(result);
	  		parser.setEncoding("UTF-8");
	  		AndFilter filter=new AndFilter(new TagNameFilter(tabName), new HasAttributeFilter(attributeName,attributeValue));
	  		NodeList nodelist = parser.parse(filter);
	  		nodes = nodelist.toNodeArray();
	  	} catch (Exception e) {
	  		e.printStackTrace();
	  	}			
		return nodes;
	} 
	
	
	public static Node[] getNodeListOfResult(String result,String tabName,String attributeName,String attributeValue) {
  		Node[] nodes = null;
	      try {
	  		Parser parser = new Parser();
			parser.setInputHTML(result);
	  		parser.setEncoding("UTF-8");
	  		AndFilter filter=new AndFilter(new TagNameFilter(tabName), new HasAttributeFilter(attributeName,attributeValue));
	  		NodeList nodelist = parser.parse(filter);
	  		nodes = nodelist.toNodeArray();
	  	} catch (Exception e) {
	  		e.printStackTrace();
	  	}			
		return nodes;
	} 	
	
	
	
	
	
	
	
	
	/**
	 * 绕过网络爬虫的抓取
	 * @param url
	 * @param tabName
	 * @param attributeName
	 * @param attributeValue
	 * @param htmlFlag
	 * @return
	 */
	public static String getNodeStr(String url,String tabName,String attributeName,String attributeValue,boolean htmlFlag) {
		String result="";
		Node[] nodes=getNodeList(url,tabName,attributeName,attributeValue);
		if(nodes==null) return "";
		for (int i = 0; i < nodes.length; i++) {
			Node node = nodes[i];
			if(htmlFlag) {
				result=node.toHtml();
			}else {
				result=node.toPlainTextString();
			}
			break;
		}		
		return result;
	} 	
	
//	/**
//	 * 
//	 * @param url
//	 * @param tabName
//	 * @param attributeName
//	 * @param attributeValue
//	 * @param htmlFlag
//	 * @return
//	 */
//	public static String getBetterNodeStr(String url,String tabName,String attributeName,String attributeValue,boolean htmlFlag) {
//		String result="";
//		Node[] nodes=getNodeList(url,tabName,attributeName,attributeValue);
//		if(nodes==null) return "";
//		for (int i = 0; i < nodes.length; i++) {
//			Node node = nodes[i];
//			if(htmlFlag) {
//				result=node.toHtml();
//			}else {
//				result=node.toPlainTextString();
//			}
//		}		
//		return result;
//	}	
	
	
	public static void main(String[] args) throws ParserException, IOException {
  		Parser parser = new Parser();
  		parser.setURL("http://www.iteye.com/news");
  		parser.setEncoding("UTF-8");	
  		URLConnection connection=parser.getConnection();
  		System.out.println(connection.getContent());
		
	}

}
